home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / SNNSV32.ZIP / SNNSv3.2 / xgui / sources / d3_setup.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-25  |  14.4 KB  |  368 lines

  1. /*****************************************************************************
  2.   FILE           : d3_setup.c
  3.   SHORTNAME      : setup.c
  4.   SNNS VERSION   : 3.2
  5.  
  6.   PURPOSE        : creates the setup pannel
  7.   NOTES          :
  8.  
  9.   AUTHOR         : Ralf Huebner
  10.   DATE           : 1.12.1991
  11.  
  12.   CHANGED BY     :
  13.   IDENTIFICATION : @(#)d3_setup.c    1.11 3/2/94
  14.   SCCS VERSION   : 1.11
  15.   LAST CHANGE    : 3/2/94
  16.  
  17.              Copyright (c) 1990-1994  SNNS Group, IPVR, Univ. Stuttgart, FRG
  18.              
  19. ******************************************************************************/
  20.  
  21.  
  22. #include <stdio.h>
  23. #include <math.h>
  24. #include <memory.h>
  25.  
  26. #include <X11/Xlib.h>
  27. #include <X11/Xutil.h>
  28. #include <X11/Intrinsic.h>
  29. #include <X11/StringDefs.h>
  30. #include <X11/Shell.h>
  31. #include <X11/Xaw/Simple.h>
  32. #include <X11/Xaw/Box.h>
  33. #include <X11/Xaw/Form.h>
  34. #include <X11/Xaw/Toggle.h>
  35.  
  36. #include "glob_typ.h"
  37. #include "ui.h"
  38.  
  39. #include "ui_xWidgets.h"
  40.  
  41. #include "d3_global.h"
  42. #include "d3_xUtils.h"
  43. #include "d3_main.h"
  44.  
  45. #include "d3_setup.ph"
  46.  
  47.  
  48. /*****************************************************************************
  49.   FUNCTION : d3_get_float_input
  50.  
  51.   PURPOSE  : reads a float value from a dialog widget
  52.   RETURNS  : true if value has changed
  53.   NOTES    :
  54.  
  55.   UPDATE   :
  56. ******************************************************************************/
  57.  
  58. static int d3_get_float_input (Widget w, float *f)
  59.  
  60. {
  61.     float temp;
  62.  
  63.     temp = ui_xFloatFromAsciiWidget (w);
  64.     if (temp != *f) {
  65.          *f = temp;
  66.          return (TRUE);
  67.     } else
  68.          return (FALSE);
  69. }
  70.  
  71.  
  72. /*****************************************************************************
  73.   FUNCTION : d3_get_float_rad input
  74.  
  75.   PURPOSE  : reads a float value from a dialog widget and convert to radiant
  76.   RETURNS  : true if value has changed
  77.   NOTES    :
  78.  
  79.   UPDATE   :
  80. ******************************************************************************/
  81.  
  82. static int d3_get_float_rad_input (Widget w, float *f)
  83.  
  84. {    float temp;
  85.  
  86.     temp = rad (ui_xFloatFromAsciiWidget (w));
  87.     if (temp != *f) {
  88.          *f = temp;
  89.          return (TRUE);
  90.     } else
  91.          return (FALSE);
  92. }
  93.  
  94.  
  95. /*****************************************************************************
  96.   FUNCTION : d3_closeSetupPannel
  97.  
  98.   PURPOSE  : closes the setup pannel and reads all values
  99.   RETURNS  : void
  100.   NOTES    :
  101.  
  102.   UPDATE   : 8.3.93  Link Trigger
  103. ******************************************************************************/
  104.  
  105. static void d3_closeSetupPannel (Widget w, Widget pannel, caddr_t call_data)
  106.  
  107. {
  108.     int f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11;
  109.  
  110.     d3_state.rot_step [0] = rad(ui_xFloatFromAsciiWidget (rotXstepWidget));
  111.     d3_state.rot_step [1] = rad(ui_xFloatFromAsciiWidget (rotYstepWidget));
  112.     d3_state.rot_step [2] = rad(ui_xFloatFromAsciiWidget (rotZstepWidget));
  113.  
  114.     d3_state.trans_step [0] = ui_xFloatFromAsciiWidget (transXstepWidget);
  115.     d3_state.trans_step [1] = ui_xFloatFromAsciiWidget (transYstepWidget);
  116.     d3_state.trans_step [2] = ui_xFloatFromAsciiWidget (transZstepWidget);
  117.  
  118.     d3_state.scale_step [0] = ui_xFloatFromAsciiWidget (scaleStepWidget);
  119.  
  120.     f1 = d3_get_float_rad_input (rotXinitWidget, &d3_state.rot_vec[0]);  
  121.     f2 = d3_get_float_rad_input (rotYinitWidget, &d3_state.rot_vec[1]);  
  122.     f3 = d3_get_float_rad_input (rotZinitWidget, &d3_state.rot_vec[2]);  
  123.  
  124.     f4 = d3_get_float_input (transXinitWidget, &d3_state.trans_vec[0]);  
  125.     f5 = d3_get_float_input (transYinitWidget, &d3_state.trans_vec[1]);  
  126.     f6 = d3_get_float_input (transZinitWidget, &d3_state.trans_vec[2]);  
  127.  
  128.     f7 = d3_get_float_input (scaleInitWidget, &d3_state.scale_vec[0]);  
  129.  
  130.     f8 = d3_get_float_input (aspectWidget, &d3_state.unit_aspect);  
  131.     f9 = d3_get_float_input (linkWidget, &d3_state.link_scale);  
  132.  
  133.     f10 = d3_get_float_input (posTriggerWidget, &d3_state.pos_link_trigger);  
  134.     f11 = d3_get_float_input (negTriggerWidget, &d3_state.neg_link_trigger);  
  135.  
  136.     XtDestroyWidget (pannel);
  137.  
  138.     if (f1 || f2 || f3 || f3 || f5 || f6 || f7 || f8 || f9 || f10 || f11)
  139.          d3_drawNet ();
  140. }
  141.  
  142.  
  143. /*****************************************************************************
  144.   FUNCTION : d3_createSetupPannel
  145.  
  146.   PURPOSE  : creates the setup pannel
  147.   RETURNS  : void
  148.   NOTES    :
  149.  
  150.   UPDATE   : 8.3.93  Link Trigger
  151. ******************************************************************************/
  152.  
  153. void d3_createSetupPannel (Widget w, Widget button, caddr_t call_data)
  154.  
  155. {
  156.     int n;
  157.     Arg arg[10];
  158.     char buf[20];
  159.     Position xPos, yPos;
  160.     Dimension width, height;
  161.     Widget setupPannel, pannel, done, init, step, rot_x, rot_y, rot_z;
  162.     Widget trans_x, trans_y, trans_z, scale, aspect;
  163.     Widget link, posTrigger, negTrigger, border;
  164.     Widget dummy1, dummy2, dummy3, dummy4, dummy5, dummy6, dummy7, dummy8, dummy9;
  165.  
  166.     n = 0;
  167.     XtSetArg (arg[n], XtNwidth, &width); n++;
  168.     XtSetArg (arg[n], XtNheight, &height); n++;
  169.     XtGetValues (button, arg, (unsigned int) n);
  170.  
  171.     XtTranslateCoords (button, (Position) (width / 2), (Position) (height / 2),
  172.                        &xPos, &yPos);
  173.     n = 0;
  174.  
  175.     XtSetArg(arg[n], XtNx, xPos); n++;
  176.     XtSetArg(arg[n], XtNy, yPos); n++;
  177.  
  178.     setupPannel = XtCreatePopupShell ("setup", transientShellWidgetClass,
  179.                                       button, arg, (unsigned int) n);
  180.  
  181.     border = XtCreateManagedWidget("border", formWidgetClass,
  182.                                    setupPannel, NULL, ZERO);
  183.     pannel = XtCreateManagedWidget("pannel", formWidgetClass, border, NULL, ZERO);
  184.  
  185.     /* Title Widgets */
  186.  
  187.     dummy1 = ui_xCreateLabelItem ("     ", pannel, 5 * d3_fontWidth, NULL, NULL); 
  188.     dummy2 = ui_xCreateLabelItem ("   ", pannel, 3 * d3_fontWidth, dummy1, NULL);  
  189.     init = ui_xCreateLabelItem ("  base   ", pannel, 9 * d3_fontWidth,
  190.                                 dummy2, NULL); 
  191.     dummy3 = ui_xCreateLabelItem (" ", pannel, d3_fontWidth, init, NULL); 
  192.     step = ui_xCreateLabelItem ("   step  ", pannel, 9 * d3_fontWidth,
  193.                                  dummy3, NULL); 
  194.  
  195.     /* Rotation Widgets */
  196.  
  197.     dummy4 = ui_xCreateLabelItem ("rot  ", pannel, 5 * d3_fontWidth,
  198.                                   NULL, dummy1); 
  199.     rot_x = ui_xCreateLabelItem (" X ", pannel, 3 * d3_fontWidth, dummy4, dummy1); 
  200.     sprintf (buf, "%.4f", fmod (deg (d3_state.rot_vec[0]), 360.0));
  201.     rotXinitWidget = ui_xCreateDialogItem ("rotXinitWidget", pannel,
  202.                                   buf, d3_numberWidth, rot_x, dummy1 );
  203.     dummy5 = ui_xCreateLabelItem (" ", pannel, 
  204.                                   d3_fontWidth, rotXinitWidget, dummy1);
  205.     sprintf (buf, "%.4f", fmod (deg (d3_state.rot_step[0]), 360.0));
  206.     rotXstepWidget = ui_xCreateDialogItem ("rotXstepWidget", pannel,
  207.                                   buf, d3_numberWidth, dummy5, dummy1);
  208.     dummy6 = ui_xCreateLabelItem ("    ", pannel, 5 * d3_fontWidth, NULL, dummy4); 
  209.     rot_y = ui_xCreateLabelItem (" Y ", pannel, 3 * d3_fontWidth, dummy6, dummy4); 
  210.     sprintf (buf, "%.4f", fmod (deg (d3_state.rot_vec[1]), 360.0));
  211.     rotYinitWidget = ui_xCreateDialogItem ("rotYinitWidget", pannel,
  212.                                   buf, d3_numberWidth, rot_y, dummy4);
  213.     dummy7 = ui_xCreateLabelItem (" ", pannel, d3_fontWidth,
  214.                                   rotYinitWidget, dummy4); 
  215.     sprintf (buf, "%.4f", fmod (deg (d3_state.rot_step[1]), 360.0));
  216.   rotYstepWidget = ui_xCreateDialogItem ("rotXstepWidget", pannel,
  217.                                   buf, d3_numberWidth, dummy7, dummy4);
  218.  
  219.     dummy8 = ui_xCreateLabelItem ("    ", pannel, 5 * d3_fontWidth, NULL, dummy6); 
  220.     rot_z = ui_xCreateLabelItem (" Z ", pannel, 3 * d3_fontWidth,
  221.                                   dummy8, dummy6 ); 
  222.     sprintf (buf, "%.4f", fmod (deg (d3_state.rot_vec[2]), 360.0));
  223.     rotZinitWidget = ui_xCreateDialogItem ("rotZinitWidget", pannel,
  224.                                   buf, d3_numberWidth, rot_z, dummy6);
  225.     dummy9 = ui_xCreateLabelItem (" ", pannel, d3_fontWidth,
  226.                                   rotZinitWidget, dummy6);
  227.     sprintf (buf, "%.4f", fmod (deg (d3_state.rot_step[2]), 360.0));
  228.     rotZstepWidget = ui_xCreateDialogItem ("rotZstepWidget", pannel,
  229.                                   buf, d3_numberWidth, dummy9, dummy6);
  230.  
  231. /* Blank Line */
  232.  
  233.     dummy1 = ui_xCreateLabelItem ("     ", pannel, 5 * d3_fontWidth,
  234.                                   NULL, dummy8); 
  235.     dummy2 = ui_xCreateLabelItem ("   ", pannel, 3 * d3_fontWidth,
  236.                                   dummy1, dummy8);  
  237.     init = ui_xCreateLabelItem ("         ", pannel, 9 * d3_fontWidth,
  238.                                   dummy2, dummy8); 
  239.     dummy3 = ui_xCreateLabelItem (" ", pannel, d3_fontWidth, init, dummy8); 
  240.     step = ui_xCreateLabelItem ("         ", pannel, 9 * d3_fontWidth,
  241.                                   dummy3, dummy8); 
  242.  
  243. /* Translation Widgets */
  244.  
  245.     dummy4 = ui_xCreateLabelItem ("trans", pannel, 5 * d3_fontWidth,
  246.                                   NULL, dummy1); 
  247.     trans_x = ui_xCreateLabelItem (" X ", pannel, 3 * d3_fontWidth,
  248.                                   dummy4, dummy1); 
  249.     sprintf (buf, "%.4f", d3_state.trans_vec[0]);
  250.     transXinitWidget = ui_xCreateDialogItem ("transXinitWidget", pannel,
  251.                                   buf, d3_numberWidth, trans_x, dummy1);
  252.     dummy5 = ui_xCreateLabelItem (" ", pannel, d3_fontWidth,
  253.                                   transXinitWidget, dummy1);
  254.     sprintf (buf, "%.4f", d3_state.trans_step[0]);
  255.     transXstepWidget = ui_xCreateDialogItem ("transXstepWidget", pannel,
  256.                                   buf, d3_numberWidth, dummy5, step);
  257.  
  258.     dummy6 = ui_xCreateLabelItem ("    ", pannel, 5 * d3_fontWidth, NULL, dummy4); 
  259.     trans_y = ui_xCreateLabelItem (" Y ", pannel, 3 * d3_fontWidth,
  260.                                   dummy6,dummy4); 
  261.     sprintf (buf, "%.4f", d3_state.trans_vec[1]);
  262.     transYinitWidget = ui_xCreateDialogItem ("transYinitWidget", pannel,
  263.                                   buf, d3_numberWidth, trans_y, dummy4);
  264.     dummy7 = ui_xCreateLabelItem (" ", pannel, d3_fontWidth,
  265.                                   transXinitWidget, dummy4);  
  266.     sprintf (buf, "%.4f", d3_state.trans_step[1]);
  267.     transYstepWidget = ui_xCreateDialogItem ("transXstepWidget", pannel,
  268.                                   buf, d3_numberWidth, dummy7, dummy4);
  269.  
  270.     dummy8 = ui_xCreateLabelItem ("    ", pannel, 5 * d3_fontWidth, NULL, dummy6); 
  271.     trans_z = ui_xCreateLabelItem (" Z ", pannel, 3 * d3_fontWidth,
  272.                                   dummy8, dummy6); 
  273.     sprintf (buf, "%.4f", d3_state.trans_vec[2]);
  274.     transZinitWidget = ui_xCreateDialogItem ("transZinitWidget", pannel,
  275.                                   buf, d3_numberWidth, trans_z, dummy6);
  276.     dummy9 = ui_xCreateLabelItem (" ", pannel, d3_fontWidth,
  277.                                   transZinitWidget, dummy6);
  278.     sprintf (buf, "%.4f", d3_state.trans_step[2]);
  279.     transZstepWidget = ui_xCreateDialogItem ("transZstepWidget", pannel,
  280.                                   buf, d3_numberWidth, dummy9, dummy6);
  281.  
  282. /* Blank Line */
  283.  
  284.     dummy1 = ui_xCreateLabelItem ("     ", pannel, 5 * d3_fontWidth,
  285.                                   NULL, dummy8); 
  286.     dummy2 = ui_xCreateLabelItem ("   ", pannel, 3 * d3_fontWidth,
  287.                                   dummy1, dummy8);  
  288.     init = ui_xCreateLabelItem ("         ", pannel, 9 * d3_fontWidth,
  289.                                   dummy2, dummy8); 
  290.     dummy3 = ui_xCreateLabelItem (" ", pannel, d3_fontWidth, init, dummy8); 
  291.     step = ui_xCreateLabelItem ("         ", pannel, 9 * d3_fontWidth,
  292.                                   dummy3, dummy8); 
  293.  
  294. /* Scale Widgets */
  295.  
  296.     dummy4 = ui_xCreateLabelItem ("scale", pannel, 5 * d3_fontWidth,
  297.                                   NULL, dummy1); 
  298.     scale = ui_xCreateLabelItem ("   ", pannel, 3 * d3_fontWidth,
  299.                                   dummy4, dummy1); 
  300.     sprintf (buf, "%.4f", d3_state.scale_vec[0]);
  301.     scaleInitWidget = ui_xCreateDialogItem ("scaleInitWidget", pannel,
  302.                                   buf, d3_numberWidth, scale, dummy1);
  303.     dummy5 = ui_xCreateLabelItem (" ", pannel, 1 * d3_fontWidth,
  304.                                   scaleInitWidget, dummy1);
  305.     sprintf (buf, "%.4f", d3_state.scale_step[0]);
  306.     scaleStepWidget = ui_xCreateDialogItem ("scaleStepWidget", pannel,
  307.                                   buf, d3_numberWidth, dummy5, dummy1);
  308.  
  309. /* Blank Line */
  310.  
  311.     dummy1 = ui_xCreateLabelItem ("     ", pannel, 5 * d3_fontWidth,
  312.                                   NULL, dummy4); 
  313.     dummy2 = ui_xCreateLabelItem ("   ", pannel, 3 * d3_fontWidth,
  314.                                   dummy1, dummy4);  
  315.     init = ui_xCreateLabelItem ("         ", pannel, 9 * d3_fontWidth,
  316.                                   dummy2, dummy4); 
  317.     dummy3 = ui_xCreateLabelItem (" ", pannel, 1 * d3_fontWidth, init, dummy4); 
  318.     step = ui_xCreateLabelItem ("         ", pannel, 9 * d3_fontWidth,
  319.                                   dummy3, dummy4); 
  320.  
  321. /* Aspect Widget */
  322.  
  323.     aspect = ui_xCreateLabelItem ("units aspect", pannel, 16 * d3_fontWidth,
  324.                                   NULL, dummy1); 
  325.     sprintf (buf, "%.4f", d3_state.unit_aspect);
  326.     aspectWidget = ui_xCreateDialogItem ("aspectWidget", pannel,
  327.                                   buf, d3_numberWidth, aspect, dummy1);
  328. /* Link Scale Widget */
  329.  
  330.     link = ui_xCreateLabelItem ("links scale", pannel, 16 * d3_fontWidth,
  331.                                   NULL, aspect); 
  332.     sprintf (buf, "%.4f", d3_state.link_scale);
  333.     linkWidget = ui_xCreateDialogItem ("linkWidget", pannel,
  334.                                   buf, d3_numberWidth, link, aspect);
  335.  
  336. /* Positive Link Trigger Widget */
  337.  
  338.     posTrigger = ui_xCreateLabelItem ("links positive", pannel, 16 * d3_fontWidth,
  339.                                   NULL, link); 
  340.     sprintf (buf, "%.4f", d3_state.pos_link_trigger);
  341.     posTriggerWidget = ui_xCreateDialogItem ("posTriggerWidget", pannel,
  342.                                   buf, d3_numberWidth, posTrigger, link);
  343.  
  344. /* Negative Link Trigger Widget */
  345.  
  346.     negTrigger = ui_xCreateLabelItem ("links negative", pannel, 16 * d3_fontWidth,
  347.                                   NULL, posTrigger); 
  348.     sprintf (buf, "%.4f", d3_state.neg_link_trigger);
  349.     negTriggerWidget = ui_xCreateDialogItem ("negTriggerWidget", pannel,
  350.                                   buf, d3_numberWidth, negTrigger, posTrigger);
  351.  
  352.     done = d3_xCreateButtonItem ("done", border, NULL, pannel);
  353.  
  354.     XtAddCallback(done, XtNcallback, (XtCallbackProc) d3_closeSetupPannel, (caddr_t) setupPannel);
  355.  
  356.     ui_checkWindowPosition(setupPannel);
  357.     XtPopup (setupPannel, XtGrabExclusive);
  358.     ui_xDontResizeWidget(setupPannel); 
  359.  
  360. }
  361.  
  362.  
  363.  
  364.  
  365.  
  366. /* end of file */
  367. /* lines: 386 */
  368.